package com.song.proxy;

import java.lang.reflect.Proxy;

public class testProxy {
    public static void main(String[] args) {

        /**
         * 1.代理类 业务接口 Animals
         * 2.代理类 业务实现类 Dog
         * 3.代理类 业务处理 AnimalProxy
         */
        String name = "cat halt";
        AnimalProxy proxy = new AnimalProxy(name);

        //实现类dog获取加载器时需要在后面加getClass()  而接口Animals则不需要
//        Animals hello = (Animals) Proxy.newProxyInstance(dog.getClass().getClassLoader(), new Class<?>[]{Animals.class}, proxy);
        Animals hello = proxy.getProxy(Animals.class);

        int n = hello.printName(name, 10);//动态代理类主要实现调用隐藏 降低业务核心功能和其它功能（日志、权限检查、异常处理等）耦合度，在invoke()函数方便扩展修改功能
        System.out.println(n);
//        Object obj = hello.printName(name);//动态代理类主要实现调用隐藏
//        System.out.println(obj.getClass().getName());
//        Animals hello = proxy
    }
}
